package com.tjcd.project.library_base.common.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;

import androidx.core.graphics.drawable.RoundedBitmapDrawable;
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;

import com.blankj.utilcode.util.ConvertUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.BitmapImageViewTarget;
import com.tjcd.project.library_base.base.utils.other.RoundCornersTransformation;

/**
 *
 */

/**
 * @Author jiangKunKun
 * @CreateDate 2021/7/13
 * @Description Glide 图片加载
 * @SpittingGrooves
 */
public class GlideUtil {

    /**
     * 记载图片
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     */
    public static void loadImage(Context context, String url, ImageView imageView){
        Glide.with(context)
                .load(url)
                .into(imageView);
    }
    /**
     * 加载图片 带站位图和错误图
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     * @param errorResId 加载错误图
     * @param siteMapResId 加载时站位图
     */
    public static void loadImage(Context context, String url, ImageView imageView, int errorResId, int siteMapResId){
        Glide.with(context)
                .load(url)
                .apply(new RequestOptions().circleCrop().error(errorResId).placeholder(siteMapResId))
                .into(imageView);
    }

    /**
     * 加载圆形图片
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     */
    public static void loadCircleImage(final Context context, String url, ImageView imageView) {
        Glide.with(context)
                .load(url)
                .apply(new RequestOptions().circleCrop())
                .into(imageView);
    }

    /**
     * 加载圆形图片 带站位图和错误图
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     * @param errorResId 加载错误图
     * @param siteMapResId 加载时站位图
     */
    public static void loadCircleImage(final Context context, String url, ImageView imageView, int errorResId, int siteMapResId) {
        Glide.with(context)
                .load(url)
                .apply(new RequestOptions().circleCrop().error(errorResId).placeholder(siteMapResId))
                .into(imageView);
    }

    /**
     * 加载圆角图片
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     * @param radius 设置圆角度数
     * @param cornerType 设置哪些角是圆角
     */
    public static void loadRoundedCornersImage(Context context, String url, ImageView imageView, int radius, RoundCornersTransformation.CornerType cornerType) {
        Glide.with(context)
                .load(url)
                .apply(RequestOptions.bitmapTransform(new RoundCornersTransformation(context,
                        radius,
                        cornerType)))
                .into(imageView);
    }

    /**
     * 加载圆角图片 带站位图和错误图
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     * @param errorResId 加载错误图
     * @param siteMapResId 加载时站位图
     * @param radius 设置圆角度数
     * @param cornerType 设置哪些角是圆角
     */
    public static void loadRoundedCornersImage(Context context, String url, ImageView imageView, int errorResId, int siteMapResId, int radius, RoundCornersTransformation.CornerType cornerType) {
        Glide.with(context)
                .load(url)
                .apply(RequestOptions.bitmapTransform(new RoundCornersTransformation(context,
                        radius,
                        cornerType))
                        .error(errorResId)
                        .placeholder(siteMapResId))
                .into(imageView);
    }

    /**
     * 加载圆角图片  解决(scaleType)冲突 带站位图和错误图
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     * @param radius 设置圆角度数
     */
    public static void loadRoundedCornerConflictImage(final Context context, String url, ImageView imageView, int radius) {
        Glide.with(context)
                .asBitmap()
                .load(url)
                .apply(new RequestOptions().transform(new CenterCrop()))
                .into(new BitmapImageViewTarget(imageView) {
                    @Override
                    protected void setResource(Bitmap resource) {
                        super.setResource(resource);
                        RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource);
                        roundedBitmapDrawable.setCornerRadius(ConvertUtils.dp2px(radius));
                        imageView.setImageDrawable(roundedBitmapDrawable);
                    }
                });
    }

    /**
     * 加载圆角图片  解决(scaleType)冲突 带站位图和错误图
     * @param context 上下文
     * @param url 图片url
     * @param imageView 承载视图
     * @param errorResId 加载错误图
     * @param siteMapResId 加载时站位图
     * @param radius 设置圆角度数
     */
    public static void loadRoundedCornerConflictImage(final Context context, String url, ImageView imageView, int errorResId, int siteMapResId, int radius) {
        Glide.with(context)
                .asBitmap()
                .load(url)
                .apply(new RequestOptions().transform(new CenterCrop()).error(errorResId).placeholder(siteMapResId))
                .into(new BitmapImageViewTarget(imageView) {
                    @Override
                    protected void setResource(Bitmap resource) {
                        super.setResource(resource);
                        RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource);
                        roundedBitmapDrawable.setCornerRadius(ConvertUtils.dp2px(radius));
                        imageView.setImageDrawable(roundedBitmapDrawable);
                    }
                });
    }

}
